#include <stdio.h>
#include <stdlib.h>
#include "arvore.h"

ARVORE* a_inserirNo(int info, ARVORE **raiz){
	if(!*raiz){
		if(!(*raiz=(ARVORE*)malloc(sizeof(ARVORE)))) return(NULL);
		(*raiz)->info = info, (*raiz)->esq = (*raiz)->dir = NULL;
		return(*raiz);
	}
	else if(info < (*raiz)->info) return(info, a_inserirNo(info, &(*raiz)->esq));
	else if(info > (*raiz)->info) return(info, a_inserirNo(info, &(*raiz)->dir));
	else return(NULL);
}

void  a_imprimirOrdenado(ARVORE *raiz){
	if(!raiz) return;
	a_imprimirOrdenado(raiz->esq);
	printf("[%d] ", raiz->info);
	a_imprimirOrdenado(raiz->dir);
}

int a_contarNos(ARVORE *raiz){
	if(!raiz) return(0);
	return(a_contarNos(raiz->esq) + a_contarNos(raiz->dir) +1);
}

int a_contarFolhas(ARVORE *raiz){
	if(!raiz->esq && !raiz->dir) return(1);
	else if(raiz->esq && !raiz->dir) return(a_contarFolhas(raiz->esq));
	else if(!raiz->esq && raiz->dir) return(a_contarFolhas(raiz->dir));
	else return(a_contarFolhas(raiz->esq) + a_contarFolhas(raiz->dir));
}

int a_contarNosDaEsquerda(ARVORE *raiz){
	if(!raiz) return(-1);
	return(a_contarNos(raiz->esq)+1);
}

int a_calcAltura(ARVORE *raiz){
	int esq, dir;
	if(!raiz) return(-1);
	esq=a_calcAltura(raiz->esq), dir=a_calcAltura(raiz->dir);
	if(esq>=dir) return(esq+1);
	else return(dir+1);
}

int a_compararArvores(ARVORE *raiz1, ARVORE *raiz2){
	if(!raiz1 && !raiz2) return(1);
	if(!raiz1 ^ !raiz2) return(0);
	if(raiz1->info == raiz2->info) return(1);
	else return(0);
	return(a_compararArvores(raiz1->esq, raiz2->esq) && a_compararArvores(raiz1->dir, raiz2->esq));
}
